AttributeError: 'NoneType'对象没有'get'属性的解决方法

您所在的位置:网站首页 get adictionary翻译 AttributeError: 'NoneType'对象没有'get'属性的解决方法

AttributeError: 'NoneType'对象没有'get'属性的解决方法

2023-11-03 22:30| 来源: 网络整理| 查看: 265

AttributeError: 'NoneType' 对象没有'get'属性,主要发生在你试图调用get()方法时发生。该属性get()方法存在于 dictionary 中,必须在 dictionary 数据类型上调用。

在本教程中,我们将看看到底什么是 AttributeError: 'NoneType' object has no attribute 'get',以及如何通过实例解决这个错误。

什么是AttributeError:'NoneType'对象没有属性'get'?

如果我们调用get()方法,Python 将引发AttributeError: 'NoneType' 对象没有属性 'get'。如果你有一个返回None而不是 dictionary 的方法,或者我们忘记了函数中的返回语句,也会发生这个错误,如下图所示。

让我们举一个简单的例子来重现这个错误。

# Method return None instead of dict def fetch_data(): output = {"name": "Audi", "price": "$45000"} data = fetch_data() print(data.get("name"))

输出

AttributeError: 'NoneType' object has no attribute 'get'

在上面的例子中,我们有一个方法 fetch_data()返回一个None 而不是一个dictionary,因为缺少返回语句。

由于我们在None值上调用get()方法,我们得到了AttributeError。

我们还可以检查变量类型是否使用了type()方法,并且使用dir()方法,我们还可以打印一个给定对象的所有属性的列表。

# Method return None instead of dict def fetch_data(): output = {"name": "Audi", "price": "$45000"} data = fetch_data() print("The type of the object is ", type(data)) print("List of valid attributes in this object is ", dir(data))

输出

The type of the object is List of valid attributes in this object is ['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] PS C:\Personal\IJS\Code> 如何解决AttributeError: 'NoneType' object has no attribute 'get'?

让我们看看如何解决这个错误。

解决方案 1 - 对有效的字典调用 get() 方法

我们可以通过调用 get()方法来解决这个问题,在有效的字典对象上调用这个方法,而不是无 类型。

该 dict.get()方法返回给定键的值。该 get()方法不会抛出KeyError,如果键不存在的话;相反,我们会得到 **None**值或我们在方法中传递的默认值。 get()方法中传递的值或默认值。

# Method return None instead of dict def fetch_data(): output = {"name": "Audi", "price": "$45000"} return output data = fetch_data() # Get the car Name print(data.get("name"))

输出

Audi 解决方案 2 - 使用 type 检查对象是否是 dictionary 类型的

另一种方法是检查对象是否为 dictionary 类型;我们可以用 type()方法来做。这样,我们就可以在调用方法之前检查对象的数据类型是否正确。 get()方法。

# Method return None instead of dict def fetch_data(): output = {"name": "Audi", "price": "$45000"} return output data = fetch_data() # Check if the object is dict if (type(data) == dict): print(data.get("name")) softwares = None if (type(softwares) == dict): print(softwares.get("name")) else: print("The object is not dictionary and it is of type ", type(softwares))

输出

Audi The object is not dictionary and it is of type 解决方案 3 - 使用 hasattr 检查该对象是否有 get 属性

在调用 get()方法之前,我们还可以检查对象是否具有某种属性。即使我们调用一个返回不同数据的外部API,使用 hasattr()方法,我们可以检查该对象是否有一个给定名称的属性。

# Method return None instead of dict def fetch_data(): output = {"name": "Audi", "price": "$45000"} return output data = fetch_data() # Check if the object is dict if (hasattr(data, 'get')): print(data.get("name")) # Incase of None value softwares = None if (hasattr(softwares, 'get')): print(softwares.get("name")) else: print("The object does not have get attribute")

输出

Audi The object does not have get attribute 总结

AttributeError: 'NoneType' object has no attribute 'get' 发生在你尝试调用get()方法时,会发生AttributeError: 'NoneType ' object has no attribute 'get' 。如果调用方法返回一个None 而不是一个dictionary 对象,也会发生这个错误。

我们可以通过调用 get()方法,而不是调用None。我们可以检查对象是否是 dictionary 类型的,使用 type()方法来检查对象是否是 dictionary 类型的,另外,我们还可以在执行 get 操作之前用 hasattr()在执行获取操作之前检查对象是否具有有效的获取属性。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3